package com.alks.function.mapper.produce;

import com.alks.entity.data.entity.*;
import com.alks.function.data.dto.produce.CutPlanLotDto;
import com.alks.function.data.request.produce.CutPlanLotRequest;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

@Mapper
public interface CutPlanMapper {

    /**
     * 查询是否生成轮次数据
     * @param lotNo
     * @param companyId
     */
    List<PcCuttingLsLabel> selectByLotNos(String lotNo, String companyId);

    /**
     * 查询指令是否已生产
     * @param companyId
     * @param lotNo
     * @return
     */
    Integer countByLotNo(String companyId, String lotNo);

    /**
     * 删除生产数据指令
     * @param companyId
     * @param lotNo
     * @return
     */
    int delPcCutPartStatus(String companyId, String lotNo);

    /**
     * 查询批次数据是否存在
     * @param companyId
     * @param lotNo
     */
    List<PcCuttingLsHead> selectByLotNoToPcCuttingLsHead(String companyId, String lotNo);

    /**
     * 删除批次号码明细
     * @param companyId
     * @param lotNo
     */
    void deleteByLotNoToPcCuttingLsDetail(String companyId, String lotNo);

    /**
     * 删除批次
     * @param companyId
     * @param lotNo
     */
    void deleteByLotNoToPcCuttingLsHead(String companyId, String lotNo);

    /**
     * 添加轮次指令
     * @param pcCuttingLsHead
     */
    int addPcCuttingLsHead(PcCuttingLsHead pcCuttingLsHead);

    /**
     * 添加号码批次
     * @param pcCuttingLsDetail
     */
    int addPcCuttingLsDetail(PcCuttingLsDetail pcCuttingLsDetail);

    /**
     * 查询待安排资料
     * @param request
     */
    List<CutPlanLotDto> selectByLotNoList(CutPlanLotRequest request);

    /**
     * 查询已安排指令资料
     * @param request
     * @return
     */
    List<CutPlanLotDto> loadCuttingDealList(CutPlanLotRequest request);

    /**
     * 查询批次号码明细
     * @param lotNo
     * @param companyId
     */
    List<PcCuttingLsDetail> getBatchNumberDetails(String lotNo, String companyId);

    /**
     * 查询部件号码明细
     * @param lotNo
     * @param companyId
     */
    List<PcCutPartStatus> getPartProcessList(String lotNo, String companyId);

    /**
     * 添加生产号码
     * @param batchList
     */
    int addPcCutPartStatusList(List<PcCutPartStatus> batchList);

    /**
     * 查询针车发料数据
     * @param lotNo
     * @param companyId
     */
    List<PcStitchPartStatus> getPartProcessList2(String lotNo, String companyId);

    /**
     * 添加针车发料数据
     * @param batchList
     */
    int addPcStitchPartStatus(List<PcStitchPartStatus> batchList);

    /**
     * 查询批次号是否已生成
     * @param companyId
     * @param lotNo
     * @return
     */
    int selectPcCuttingLsLabel(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    /**
     * 查询批次号明细
     * @param lotNo
     * @param companyId
     * @return
     */
    List<PcCuttingLsDetail> getPcCuttingLsDetails(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    /**
     * 添加部件标签
     * @param label
     * @param lotNo
     * @param partName
     * @param curIndex
     * @param batchCode
     * @param qty
     * @param style
     * @param color
     * @param lsNo
     * @param sizeNo
     * @return
     */
    int addPcCuttingLsDetail2(@Param("label") String label, @Param("lotNo") String lotNo, @Param("partName") String partName,
                              @Param("curIndex") int curIndex, @Param("batchCode") String batchCode, @Param("qty") Integer qty,
                              @Param("style") String style, @Param("color") String color, @Param("lsNo") Integer lsNo, @Param("sizeNo") String sizeNo);

    int addPcCuttingLsDetail3(@Param("label") String label, @Param("lotNo") String lotNo, @Param("partName") String partName,
                               @Param("curIndex") int curIndex, @Param("batchCode") String batchCode, @Param("style") String style, @Param("color") String color,
                               @Param("lsNo") Integer lsNo, @Param("sizeNo") String sizeNo);

    int addPcCutPartStatus(@Param("companyId") String companyId, @Param("lotNo") String lotNo, @Param("partName") String partName);

    int addPcStitchPartStatus2(@Param("companyId") String companyId, @Param("lotNo") String lotNo, @Param("partName") String partName);

    int addPcCutPartStatus2(@Param("companyId") String companyId, @Param("lotNo") String lotNo, @Param("partName") String partName, @Param("processCode") String processCode);

    int addPcStitchPartStatus3(@Param("companyId") String companyId, @Param("lotNo") String lotNo, @Param("partName") String partName);

    int getPcCuttingLsHeadBkToVersion(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    int addPcCuttingLsHeadBk(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("userName") String userName, @Param("version") int version);

    int addPcCuttingLsDetailBk(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("userName") String userName, @Param("version") int version);

    int addPcLastLsHeadBk(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("userName") String userName, @Param("version") int version);

    int addPcLastLsDetailBk(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("userName") String userName, @Param("version") int version);

    int addPcCuttingLsLabelBk(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("userName") String userName, @Param("version") int version);

    int addPcCutPartStatusBk(@Param("lotNo") String lotNo, @Param("userName") String userName, @Param("version") int version);

    int addPcStitchPartStatusBk(@Param("lotNo") String lotNo, @Param("userName") String userName, @Param("version") int version);

    int delPcLastLsDetail(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    int delPcLastLsHead(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    int addPcCuttingLsHeadToTemp(@Param("lotNo") String lotNo, @Param("version") int version);

    int addPcCuttingLsDetailToTemp(@Param("lotNo") String lotNo, @Param("version") int version);

    int getPcCuttingLsHeadToLsNo(String lotNo);

    Integer getPcCuttingLsHeadToQty(@Param("lotNo") String lotNo, @Param("sizeNo") String sizeNo);

    int updatePcCuttingLsHeadToQty(@Param("lotNo") String lotNo, @Param("lsNo") int lsNo);

    int updatePcCuttingLsDetailToBk(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    int addPcCutPartStatus3(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    int addPcStitchPartStatus4(@Param("companyId") String companyId, @Param("lotNo") String lotNo);

    List<PcCutPartStatus> getPcCutPartStatusBkList(@Param("lotNo") String lotNo, @Param("version") int version);

    List<PcCutPartStatus> getPcCutPartStatusList(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    int updatePcCutPartStatusByProdQty(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("sizeNo") String sizeNo,
                                       @Param("partName") String partName, @Param("processCode") String processCode, @Param("lsNo") BigDecimal lsNo, @Param("qty") Integer qty);

    List<PcCutPartStatus> getPcCutPartStatusBkList2(@Param("lotNo") String lotNo, @Param("version") int version);

    List<PcCutPartStatus> getPcCutPartStatusList2(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    int updatePcCutPartStatusBySendQty(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("sizeNo") String sizeNo,
                                       @Param("partName") String partName, @Param("processCode") String processCode, @Param("lsNo") int lsNo, @Param("qty") Integer qty);

    List<PcStitchPartStatus> getPcStitchPartStatusBkList(@Param("lotNo") String lotNo, @Param("version") int version);

    List<PcStitchPartStatus> getPcStitchPartStatusList(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    int updatePcStitchPartStatusByProdQty(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("sizeNo") String sizeNo, @Param("partName") String partName, @Param("qty") Integer qty);

    List<PcStitchPartStatus> getPcStitchPartStatusBkList2(@Param("lotNo") String lotNo, @Param("version") int version);

    List<PcStitchPartStatus> getPcStitchPartStatusList2(@Param("lotNo") String lotNo, @Param("companyId") String companyId);

    int updatePcStitchPartStatusBySendQty(@Param("lotNo") String lotNo, @Param("companyId") String companyId, @Param("sizeNo") String sizeNo, @Param("partName") String partName, @Param("qty") Integer qty);
}
